对称型(Symmetrict)NAT打洞穿透可行性分析

您所在的位置:网站首页 webrtc stun绑定端口 对称型(Symmetrict)NAT打洞穿透可行性分析

对称型(Symmetrict)NAT打洞穿透可行性分析

2023-12-04 19:38| 来源: 网络整理| 查看: 265

对称型(Symmetrict)NAT打洞穿透可行性分析

本文适合已经对webrtc的p2p打洞传输原理有经验的读者,不适用webrtc新手

背景

我们在学习WebRtc的p2p打洞传输原理时,都了解过几种NAT类型。

完全圆锥( Full Cone) : NAT把所有来自相同内部IP地址和端口的请求映射到相同的外部IP地址和端口。任何一个外部主机均可通过该映射发送IP包到该内部主机。IP限制性圆锥(IP Restricted Cone) : NAT把所有来自相同内部IP地址和端口的请求映射到相同的外部IP地址和端口。但是,只有当内部主机先给IP地址为X的外部主机发送IP包,该外部主机才能向该内部主机发送IP包。端口限制性圆锥(Port Restricted Cone) : 端口限制性圆锥与限制性圆锥类似,只是多了端口号的限制,即只有内部主机先向IP地址为X,端口号为P的外部主机发送1个IP包,该外部主机才能够把源端口号为P的IP包发送给该内部主机。对称型(Symmetrict) : NAT把每个不同目的IP和端口的请求都会映射到相同的外部IP地址和不同的端口。

其中完全圆锥型(Full Cone)的限制最少,IP限制圆锥型(IP Restricted Cone),端口限制圆锥型(Port Restricted Cone)、对称型(Symmetrict)的限制一个比一个严格。

最严格的对称型NAT每次目的不同的请求使用的端口都不一样,很多公开的文章中都说对称型NAT无法穿透。但是也有部分文章会说打洞的成功与否取决于两端的NAT类型配合,对称型NAT和特定的NAT类型配合也是可以穿透成功的,但并没有给出具体的解释。

此文章就对称型(Symmetrict)NAT到底是否能够穿透问题给出原理性的解释。

对称型NAT穿透分析 对称型-完全圆锥型(Symmetrict-Full Cone)

可以穿透成功

完全圆锥型NAT端向STUN服务器发送后得到反射的IP1:PORT1是无限制的,所以对称型NAT端可以在交换SDP后向完全圆锥型NAT端的IP1:PORT1发送数据,完全圆锥型NAT端是可以收到的。

而因为对称型NAT端向完全圆锥型NAT端的IP1:PORT1发送数据后,打了一个通向IP1:PORT1的洞。所以也可以接收从完全圆锥型NAT端的IP1:PORT1发回来的数据。那么完全圆锥型NAT端只要向收到包的来源地址回包,就可以将数据成功发送到对称型NAT端了。

此时两端都能收到对方的数据,也即是穿透成功。

对称型-IP限制圆锥型(Symmetrict-IP Restricted Cone)

可以穿透成功

对称型NAT端向STUN服务器发送后得到反射的IP1:PORT1的PORT1只能和STUN服务器通信,IP限制圆锥型NAT端向STUN服务器发送后得到反射的IP2:PORT2也同样只能和STUN服务器通信,虽然这两个地址无法直接使用,但是由于NAT端的公网IP是不变的,所以无论两个NAT端无论向哪里发包,使用的IP1和IP2是不变的。

接着IP限制圆锥型NAT端在交换SDP后向对称型NAT端的IP1:PORT1发送数据,虽然对称型NAT端无法收到。但是IP限制圆锥型NAT端却打了一个通向IP1的洞,因为IP限制圆锥型NAT端只对回包的IP有限制,对端口没有限制,所以此时从IP1发送过来的包都会被放行。

然后对称型NAT端向IP限制圆锥型NAT端的IP2:PORT2发送数据,因为对称型NAT端的公网IP不会变化,所以IP限制圆锥型NAT端能够收到数据,然后因为对称型NAT端发送数据的时候已经打了一个通向IP2:PORT2的洞。那么IP限制圆锥型NAT端只要向收到包的来源地址回包,就可以将数据成功发送到对称型NAT端了。

此时两端都能收到对方的数据,也即是穿透成功。

对称型-端口限制圆锥型(Symmetrict-PORT Restricted Cone)

无法穿透

端口限制圆锥型只比IP限制圆锥型多了一个回包的端口限制,同时因为对称型NAT端每次向不同地址都使用新的端口,所以端口限制圆锥型端无法打出一个能够收到对称型NAT数据的洞。

所以也就无法穿透成功。

对称型-对称型(Symmetrict-Symmetrict)

无法穿透

因为对称型NAT端在向不同的地址发送数据时都使用不同的端口,所以两端没办法先确定一个能够接受数据的端口,所以无法收到数据,也就无法穿透。

对称型NAT穿透总结

从上面的几种分析可以总结出一条规律,由于对称型NAT端在向不同的地址发送数据时都使用不同的端口,所以想穿透对称型NAT的办法就是要先找到一条路,让另一端收到对称型NAT端发送的数据,然后利用到对称型NAT端发送的数据打出来的洞,向数据来源回包,让对称型NAT端也能够收到数据。

也就是说,只要我们能够让一端收到对称型NAT端发送的数据,就可以穿透成功。

所以利用完全圆锥型NAT和IP限制圆锥型NAT的公网IP不变和不限制来源包端口的特点就可以收到对称型NAT端发送的数据,达成穿透效果。以此类推,一端是公网的情况下配合对称型NAT端也可以穿透成功。还有如果一端能够掌握一些NAT的操作接口或者端口规律,能够收到对称型NAT端发送的数据,也可以穿透成功,这就是目前一些双端都是对称型NAT也能够穿透的原理。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3